import { defineStore } from 'pinia'
import { setToken, getToken } from '@/libs/util'
import { login, getUserInfo } from '@/api/user'
import { ElNotification } from 'element-plus'

const useUserStore = defineStore('user', {
    state: () => ({
        userName: '',
        userId: '',
        avatorImgPath: '',
        token: getToken(),
        access: '',
        hasGetInfo: false,
        userFeature: ''
    }),
    getters: {
        /** 权限列表
         * all 所有权限
         * native_preview 原生预览模式（带左侧导航）
         * native_publish 原生发布（下载原生代码包）
         * template_preview 模板发布预览（无左侧导航）【暂未处理】
         * template_publish 模板发布，直接发布【暂未处理】
         * plugin_page 功能页面组
         * module_page 模块页面组
         * outerlink_page 外链页面组
         * ele_data 元素数据
         * dev_data 开发数据
         * extend_json 扩展json
         */
        feature: state => state.userFeature?.split(',') || []
    },
    actions: {
        setToken(token) {
            this.token = token
            setToken(token)
        },
        // 登录 原handleLogin方法
        login({ userName, password }) {
            userName = userName.trim()
            return new Promise((resolve, reject) => {
                login({
                    userName,
                    password
                }).then(res => {
                    const { Status: code, Data: data } = res
                    if (code === 1) {
                        this.setToken(data.token)
                        resolve(res)
                    } else {
                        reject(res)
                    }
                }).catch(err => {
                    reject(err)
                })
            })
        },
        // 退出登录 原handleLogOut方法
        loginOut() {
            return new Promise((resolve, reject) => {
                this.setToken('')
                this.access = []
                resolve()
            })
        },
        // 获取用户信息
        getUserInfo() {
            return new Promise(async (resolve, reject) => {
                const res = await getUserInfo(this.token)
                if (res.Status === 1) {
                    const data = res.Data
                    this.avatorImgPath = data.AvaterUrl
                    this.userName = data.Name
                    this.userId = data.Id
                    this.access = data.Access
                    this.userFeature = data.Feature
                    this.hasGetInfo = true
                    resolve(data)
                } else {
                    this.hasGetInfo = false
                    ElNotification({
                        title: res.Message || '网络错误',
                        type: 'warning'
                    })
                    reject(res)
                }
            })
        }
    }
})

export default useUserStore